/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package BeansGerenciaveis;

import DAO.AutorDao;
import DAO.PDFDao;
import DAO.TemaDao;
import DAO.TrabalhoGSDAO;
import bean.Autor;
import bean.PDF;
import bean.Tema;
import bean.TrabalhoGestaoSocial;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.context.FacesContext;
import org.primefaces.event.FileUploadEvent;
import org.primefaces.model.UploadedFile;

/**
 *
 * @author fernando
 */
@ManagedBean
@ViewScoped
public class TrabalhoGSBean implements Serializable {

    /**
     * Creates a new instance of TrabalhoGSBean
     */
    public TrabalhoGSBean() {
        this.tipoAvaliacoes = new ArrayList(Arrays.asList("Avaliação de Egressos", "Avaliação de Perfil de Ingressos", "Avaliação de Competências", "Avaliação de Impacto", "Avaliação de Resultado", "Meta-avaliação"));
        this.tipologias = new ArrayList(Arrays.asList("Livro", "Tese de Doutorado", "Dessertação de Mestrado", "Monografia/TCC de Especialização", "Monografia/TCC de Graduação", "Artigo Publicado em Periódico", "Artigos Publicado em Anais", "Não Pulicado", "Relatório Institucional"));
        this.autorSelecionado = new Autor();
        this.temas = new ArrayList<Tema>();
        this.temaSelecionado = new Tema();
        this.trabalho = new TrabalhoGestaoSocial();
        this.trabalhoSelecionado = new TrabalhoGestaoSocial();
        this.autores = new ArrayList<Autor>();
    }

    public void cadastrar() {
        this.trabalho.setAutores(autores);
        this.trabalho.setPalavrasChave(temas);
        if (!new TrabalhoGSDAO().validarCadastroTrabalhoGS(trabalho)) {
            FacesContext facesContext = FacesContext.getCurrentInstance();
            facesContext.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "Erro", "Desculpe, esse trabalho já se encontra cadastrado na nossa base de dados"));

        } else if (new TrabalhoGSDAO().cadastrarTrabalhoGS(trabalho)) {
            FacesContext facesContext = FacesContext.getCurrentInstance();
            facesContext.addMessage(null, new FacesMessage("Sucesso", "Trabalho cadastrado!"));
            this.trabalho = new TrabalhoGestaoSocial();
            this.listaAutores = new ArrayList<Autor>();
            this.listaTemas = new ArrayList<Tema>();
            this.trabalhos = null;
        } else {
            FacesContext facesContext = FacesContext.getCurrentInstance();
            facesContext.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "Erro", "Desculpe, é possível cadastrar no máximo 3 palavras-chave"));
        }

    }
    
    public String editar(){
        String retorno = "";
        
        if(new TrabalhoGSDAO().alterarTrabalho(trabalho)){
            FacesContext facesContext = FacesContext.getCurrentInstance();
            facesContext.addMessage(null, new FacesMessage("Sucesso", "Trabalho alterado!"));
            retorno = "listar.xhtml?faces-redirect=true";
        }else{
            FacesContext facesContext = FacesContext.getCurrentInstance();
            facesContext.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "Erro", "Desculpe, não foi possível alterar o trabalho selecionado!"));
            
        }
        
        return retorno;
    }

    public TrabalhoGestaoSocial getTrabalho() {
        return trabalho;
    }

    public void setTrabalho(TrabalhoGestaoSocial trabalho) {
        this.trabalho = trabalho;
    }

    public TrabalhoGestaoSocial getTrabalhoSelecionado() {
        return trabalhoSelecionado;
    }

    public void setTrabalhoSelecionado(TrabalhoGestaoSocial trabalhoSelecionado) {
        this.trabalhoSelecionado = trabalhoSelecionado;
    }

    public ArrayList<Autor> getListaAutores() {
        if (this.listaAutores == null) {
            this.listaAutores = (ArrayList<Autor>) new AutorDao().listarAutoresSimplficado();
        }
        return listaAutores;
    }

    public void setListaAutores(ArrayList<Autor> listaAutores) {
        this.listaAutores = listaAutores;
    }

    public Autor getAutorSelecionado() {
        return autorSelecionado;
    }

    public void setAutorSelecionado(Autor autorSelecionado) {
        this.autorSelecionado = autorSelecionado;
    }

    public ArrayList<Tema> getListaTemas() {
        if (this.listaTemas == null) {
            listaTemas = (ArrayList<Tema>) new TemaDao().listarTemas();
        }
        return listaTemas;
    }

    public void setListaTemas(ArrayList<Tema> listaTemas) {
        this.listaTemas = listaTemas;
    }

    public Tema getTemaSelecionado() {
        return temaSelecionado;
    }

    public void setTemaSelecionado(Tema temaSelecionado) {
        this.temaSelecionado = temaSelecionado;
    }

    public ArrayList<String> getTipologias() {
        return tipologias;
    }

    public void setTipologias(ArrayList<String> tipologias) {
        this.tipologias = tipologias;
    }

    public ArrayList<String> getTipoAvaliacoes() {
        return tipoAvaliacoes;
    }

    public void setTipoAvaliacoes(ArrayList<String> tipoAvaliacoes) {
        this.tipoAvaliacoes = tipoAvaliacoes;
    }

    public ArrayList<Tema> getTemas() {
        return temas;
    }

    public void setTemas(ArrayList<Tema> temas) {
        this.temas = temas;
    }

    public void addPalavraChave() {
        temaSelecionado = new TemaDao().consultarTema(temaSelecionado.getId());
        if (this.temas.size() >= 3) {
            FacesContext facesContext = FacesContext.getCurrentInstance();
            facesContext.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "Erro", "Desculpe, é possível cadastrar no máximo 3 palavras-chave"));
        } else if (this.temas.contains(temaSelecionado)) {
            FacesContext facesContext = FacesContext.getCurrentInstance();
            facesContext.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "Erro", "Palavra-chave já adicionada!"));
        } else {

            this.temas.add(temaSelecionado);
            temaSelecionado = new Tema();

            FacesContext facesContext = FacesContext.getCurrentInstance();
            facesContext.addMessage(null, new FacesMessage("Sucesso", "Palavra-chave adicionada!"));

        }


    }

    public void removerPalavraChave() {

        this.temas.remove(temaSelecionado);
        temaSelecionado = new Tema();

        FacesContext facesContext = FacesContext.getCurrentInstance();
        facesContext.addMessage(null, new FacesMessage("Sucesso: ", "Palavra-chave removida!"));
    }

    public void addPalavraChaveEdicao() {
        temaSelecionado = new TemaDao().consultarTema(temaSelecionado.getId());
        if (this.trabalho.getPalavrasChave().size() >= 3) {
            FacesContext facesContext = FacesContext.getCurrentInstance();
            facesContext.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "Erro", "Desculpe, é possível cadastrar no máximo 3 palavras-chave"));
        } else if (this.trabalho.getPalavrasChave().contains(temaSelecionado)) {
            FacesContext facesContext = FacesContext.getCurrentInstance();
            facesContext.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "Erro", "Palavra-chave já adicionada!"));
        } else {
           
            this.trabalho.getPalavrasChave().add(temaSelecionado);
            temaSelecionado = new Tema();

            FacesContext facesContext = FacesContext.getCurrentInstance();
            facesContext.addMessage(null, new FacesMessage("Sucesso", "Palavra-chave adicionada!"));

        }


    }

    public void removerPalavraChaveEdicao() {

        this.trabalho.getPalavrasChave().remove(temaSelecionado);
        temaSelecionado = new Tema();

        FacesContext facesContext = FacesContext.getCurrentInstance();
        facesContext.addMessage(null, new FacesMessage("Sucesso: ", "Palavra-chave removida!"));
    }

    public void doUploadPDF(FileUploadEvent event) {
        try {
            System.out.println("UploadRelatorio Avalização");
            UploadedFile file = event.getFile();
            if (file.getContents().length > 0) {
                if (new PDFDao().validarInsercaoPdf(file.getFileName())) {
                    System.out.println("Dados: " + file.getFileName() + file.getContentType());
                    pdfUpload = new PDF();
                    pdfUpload.setConteudo(file.getContents());
                    pdfUpload.setNome(file.getFileName());
                    trabalho.setPdf(pdfUpload);
                    FacesContext facesContext = FacesContext.getCurrentInstance();
                    facesContext.addMessage(null, new FacesMessage("Aquivo Recebido com Sucesso", ""));
                } else {
                    FacesContext facesContext = FacesContext.getCurrentInstance();
                    facesContext.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "Erro:", "Já existe uma pdf cadastrado com esse nome! "));
                }

            }

        } catch (Exception ex) {
            Logger.getLogger(CursoBean.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    public PDF getPdfUpload() {
        return pdfUpload;
    }

    public void setPdfUpload(PDF pdfUpload) {
        this.pdfUpload = pdfUpload;
    }

    public ArrayList<TrabalhoGestaoSocial> getTrabalhos() {
        if (trabalhos == null) {
            trabalhos = new TrabalhoGSDAO().listarTrabalhosGS();
        }
        return trabalhos;
    }

    public void setTrabalhos(ArrayList<TrabalhoGestaoSocial> trabalhos) {
        this.trabalhos = trabalhos;
    }

    public ArrayList<Autor> getAutores() {
        return autores;
    }

    public void setAutores(ArrayList<Autor> autores) {
        this.autores = autores;
    }

    public void addAutor() {
        autorSelecionado = new AutorDao().consultaAutor(autorSelecionado.getId());
        if (this.autores.contains(autorSelecionado)) {
            FacesContext facesContext = FacesContext.getCurrentInstance();
            facesContext.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "Erro", "Autor já adicionado!"));
        } else {

            this.autores.add(autorSelecionado);
            autorSelecionado = new Autor();

            FacesContext facesContext = FacesContext.getCurrentInstance();
            facesContext.addMessage(null, new FacesMessage("Sucesso", "Autor adicionado!"));

        }


    }

    public void removerAutor() {

        this.autores.remove(autorSelecionado);
        autorSelecionado = new Autor();

        FacesContext facesContext = FacesContext.getCurrentInstance();
        facesContext.addMessage(null, new FacesMessage("Sucesso: ", "Autor removido!"));




    }
    
     public void addAutorEdicao() {
        autorSelecionado = new AutorDao().consultaAutor(autorSelecionado.getId());
        if (this.trabalho.getAutores().contains(autorSelecionado)) {
            FacesContext facesContext = FacesContext.getCurrentInstance();
            facesContext.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "Erro", "Autor já adicionado!"));
        } else {

            this.trabalho.getAutores().add(autorSelecionado);
            autorSelecionado = new Autor();

            FacesContext facesContext = FacesContext.getCurrentInstance();
            facesContext.addMessage(null, new FacesMessage("Sucesso", "Autor adicionado!"));

        }


    }

    public void removerAutorEdicao() {

        this.trabalho.getAutores().remove(autorSelecionado);
        autorSelecionado = new Autor();

        FacesContext facesContext = FacesContext.getCurrentInstance();
        facesContext.addMessage(null, new FacesMessage("Sucesso: ", "Autor removido!"));
    }

    public String selecionarTrabalhoEdicao() {
        String resultado = "";

        this.trabalho = new TrabalhoGSDAO().buscarTrabalho(trabalhoSelecionado.getId());
        /*
         this.listaEgressos = (ArrayList) curso.getEngressosCursos();
         this.listaAvaliacoes = (ArrayList) curso.getAvaliacoesMEC();
         this.listaCoordenacoes = (ArrayList) curso.getCoordenacoes();
         this.listaDocentesSelecionados = (ArrayList) curso.getProfessores();
         this.listaPPP = (ArrayList) curso.getPpps();*/

        this.trabalhoSelecionado = new TrabalhoGestaoSocial();
        resultado = "editar?faces-redirect=true&amp;includeViewParams=true";
        return resultado;
    }
    private PDF pdfUpload;
    private ArrayList<String> tipologias;
    private ArrayList<String> tipoAvaliacoes;
    private TrabalhoGestaoSocial trabalho;
    private TrabalhoGestaoSocial trabalhoSelecionado;
    private ArrayList<Autor> listaAutores;
    private Autor autorSelecionado;
    private ArrayList<Tema> listaTemas;
    private ArrayList<Tema> temas;
    private Tema temaSelecionado;
    private ArrayList<TrabalhoGestaoSocial> trabalhos;
    private ArrayList<Autor> autores;
}
